package main

import (
	"fmt"
)

func main() {
	//切片的长度是动态的，可以自动扩容
	//切片是一个引用类型，它的内部结构包含地址、长度和容量

	//var 切片名 []类型
	//切片名 = make([]类型, 长度, 容量)
	var slice []int
	fmt.Println(slice)                  //[]
	fmt.Println(len(slice), cap(slice)) //0 0 //长度和容量都是0
	//默认两个属性：长度和容量
	slice = append(slice, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
	fmt.Println(slice)
	fmt.Println(len(slice), cap(slice))

	var s1 = make([]int, 5, 10)
	fmt.Println(len(s1), cap(s1)) //5 10
	fmt.Println(s1)
	s1 = append(s1, 1, 2, 3, 4, 5) //超过容量，会自动扩容 原来的容量*2
	fmt.Println(s1)
	fmt.Println(len(s1), cap(s1))

	s3 := make([]string, 5, 10)
	s3 = append(s3, "a", "b", "c")

	// append()函数返回一个新的切片，原来的切片不变
	fmt.Println(s3)               // [     a b c]
	fmt.Println(len(s3), cap(s3)) //8 10
	s3[0] = "z"
	fmt.Println(s3) // [z     a b c]
	for k, v := range s3 {
		fmt.Println(k+1, v)
	}

}
